import { existsSync } from 'fs'
import { mkdir, writeFile } from 'fs/promises'

/**
 * 确保给定路径的目录存在
 * 如果目录不存在，则递归创建该目录
 * @param path {string} 目录路径
 */
export const ensureDir = async (path: string) => {
  // 检查目录是否存在
  if (!existsSync(path)) {
    // 递归创建目录，直到路径完整存在
    await mkdir(path, { recursive: true })
  }
}

/**
 * 将数据以JSON格式写入指定文件
 * 此函数负责将给定的数据序列化为JSON字符串，并将其写入到指定路径的文件中
 * 如果数据需要格式化输出，可以通过spaces参数来定义缩进空格的数量
 * @param path 文件路径，指示数据应写入的位置
 * @param data 要写入文件的数据对象，可以是任何JSON序列化的数据类型
 * @param spaces 可选参数，定义输出JSON字符串的缩进空格数量，默认为0（无缩进）
 */
export const writeJson = (path: string, data: any, spaces = 0) =>
  writeFile(path, JSON.stringify(data, undefined, spaces), 'utf-8')
